home *** CD-ROM | disk | FTP | other *** search
/ Eagles Nest BBS 8 / Eagles_Nest_Mac_Collection_Disc_8.TOAST / Developer Tools⁄Additions / InsideBa1994 / InsideBasic-94 / IB 94 / RandomAccessDemo / FB Random Access Demo.BAS
BASIC Source File  |  1993-05-13  |  5KB  |  210 lines

  1. ' ---------------------------
  2. ' Random Access Record Demo
  3. ' ---------------------------
  4.  
  5. DIM 31 gDbFile$
  6. DIM gRecNum,gTotalRecords
  7.  
  8. DIM 41 gFirstName$                   ' len byte + 41 data bytes = 42
  9. DIM 41 gLastName$                    ' + 42 = 84
  10. DIM 41 gAddress1$                    ' + 42 = 126
  11. DIM 41 gAddress2$                    ' + 42 = 168
  12. DIM 41 gCity$                        ' + 42 = 210
  13. DIM 2  gState$                       ' 2+len byte + even pad =+4=214
  14. DIM 5  gZip$                         ' +6 = 220 total record size
  15.  
  16. _recSz = 220
  17.  
  18. END GLOBALS
  19.  
  20. LOCAL FN displayRecord
  21.   t$ = "Record #: " + STR$(gRecNum) + " of " + STR$(gTotalRecords)
  22.   PRINT%(296,20);t$
  23. END FN
  24.  
  25. LOCAL FN drawWnd
  26.   TEXT 0,12,0,0
  27.   t$ = "File: " + gDbFile$
  28.   PRINT%(8,20);t$
  29.   T = 26:L =-7:B = 26:R = 477
  30.   PEN 2,3,1,8,3
  31.   CALL MOVETO(L,T):CALL LINETO(R,B)
  32.   t$ = "First Name:    "
  33.   PRINT%(45,58);t$
  34.   t$ = "Last Name:"
  35.   PRINT%(47,86);t$
  36.   t$ = "Address Line 1:"
  37.   PRINT%(21,111);t$
  38.   t$ = "Address Line 2:"
  39.   PRINT%(22,138);t$
  40.   t$ = "City:"
  41.   PRINT%(90,164);t$
  42.   t$ = "State:"
  43.   PRINT%(82,192);t$
  44.   t$ = "Zip:"
  45.   PRINT%(184,193);t$
  46.   t$ = "Telephone:"
  47.   PRINT%(50,219);t$
  48.   FN displayRecord
  49. END FN
  50.  
  51. LOCAL FN setButtons
  52.   LONG IF gRecNum < gTotalRecords
  53.     BUTTON 2,_enable                 ' activate next
  54.   XELSE
  55.     BUTTON 2,_disable
  56.   END IF
  57.   LONG IF gRecNum > 1                ' activate previous
  58.     BUTTON 3,_enable
  59.   XELSE
  60.     BUTTON 3,_disable
  61.   END IF
  62.   FN displayRecord
  63.   EDIT FIELD 1                       ' start at first field
  64.   SETSELECT 0,&FF
  65. END FN
  66.  
  67. LOCAL FN saveRecord
  68.   LONG IF gRecNum = 0                ' first save
  69.     gDbFile$ = FILES$(_fSave,p$,gDbFile$,gSaveVol)
  70.     LONG IF LEN(gDbFile$)
  71.       gRecNum = 1                    ' set to 1st record
  72.       ON ERROR GOSUB 65535           ' disable FB's error handling
  73.       DEF OPEN "TEXTdbMO"
  74.       OPEN "N",1,gDbFile$,_recSz,gSaveVol' open for reading & writing
  75.       LONG IF NOT ERROR              ' file exists
  76.         CLOSE #1
  77.         KILL gDbFile$,gSaveVol
  78.         OPEN "N",1,gDbFile$,_recSz,gSaveVol
  79.       END IF
  80.       RECORD #1,0 
  81.       PRINT #1,"First Name"          ' store field titles in rec zero
  82.       PRINT #1,"Last Name"
  83.       PRINT #1,"Address Line 1"
  84.       PRINT #1,"Address Line 2"
  85.       PRINT #1,"City"
  86.       PRINT #1,"State"
  87.       PRINT #1,"Zip"
  88.     XELSE
  89.       ERROR = 1                      ' don't save
  90.     END IF
  91.   END IF
  92.   
  93.   LONG IF NOT ERROR
  94.     gRecNum = gTotalRecords+1        ' append new records
  95.     RECORD #1,gRecNum
  96.     FOR fld = 1 TO 7
  97.       t$ = EDIT$(fld)
  98.       PRINT #1,t$
  99.     NEXT
  100.     ' ---
  101.     ' OR: 
  102.     ' gFirstName$ = EDIT$(1)
  103.     ' gLastName$  = EDIT$(2)
  104.     ' gAddress1$  = EDIT$(3)
  105.     ' gAddress2$  = EDIT$(4)
  106.     ' gCity$      = EDIT$(5)
  107.     ' gState$     = EDIT$(6)
  108.     ' gZip$       = EDIT$(7)
  109.     ' PRINT #1, gFirstName$            
  110.     ' PRINT #1, gLastName$             
  111.     ' PRINT #1, gAddress1$             
  112.     ' PRINT #1, gAddress2$             
  113.     ' PRINT #1, gCity$                 
  114.     ' PRINT #1, gState$                
  115.     ' PRINT #1, gZip$                  
  116.     ' ---
  117.     gTotalRecords = LOF(1)-1         ' LOF(n) returns # of records
  118.     FN setButtons
  119.   XELSE
  120.     ERROR=0
  121.     BEEP                             ' sleazy error handling
  122.   END IF
  123. END FN
  124.  
  125. LOCAL FN getRecord
  126.   RECORD #1,gRecNum
  127.   FOR fld = 1 TO 7
  128.     LINE INPUT #1,t$
  129.     EDIT$(fld) = t$
  130.   NEXT
  131.   FN setButtons
  132. END FN
  133.  
  134. LOCAL FN doDialog
  135.   evnt = DIALOG (0)                  'get the actual event
  136.   id   = DIALOG (evnt)               'id of the event (not used in this program)
  137.   SELECT evnt                        'what event occurred?
  138.     CASE _wndRefresh: FN drawWnd     'update window background
  139.       
  140.     CASE _Eftab,_efReturn,_efShifttab
  141.       fld = WINDOW(_efNum)
  142.       LONG IF evnt = _efShifttab
  143.         DEC(fld)
  144.       XELSE
  145.         INC(fld)
  146.       END IF
  147.       IF fld>8 THEN fld = 1
  148.       IF fld<1 THEN fld = 8
  149.       EDIT FIELD fld
  150.       SETSELECT 0,&FF                ' select all text
  151.       
  152.     CASE _btnClick
  153.       SELECT id
  154.         CASE 1                       ' add button
  155.           FN saveRecord
  156.         CASE 2                       ' next button
  157.           INC(gRecNum)
  158.           IF gRecNum > gTotalRecords THEN gRecNum = 1' wrap
  159.           FN getRecord
  160.         CASE 3                       ' previous button
  161.           DEC(gRecNum)
  162.           IF gRecNum < 1 THEN gRecNum = gTotalRecords' wrap
  163.           FN getRecord
  164.       END SELECT
  165.   END SELECT
  166. END FN
  167.  
  168. LOCAL FN doMenu                      ' only menu item is quit
  169.   WINDOW CLOSE 1
  170.   CLOSE #1
  171.   END
  172. END FN
  173.  
  174. LOCAL FN initialize
  175.   gTotalRecords = 0
  176.   gRecNum       = 0
  177.   gDbFile$      = "Untitled"
  178.   
  179.   MENU 1,0,1,"File"
  180.   MENU 1,1,1,"Quit/Q"
  181.   
  182.   WINDOW 1,"Data Entry Form",(20,50)-(492,300),280
  183.   TEXT 0,12,0,0
  184.   
  185.   EDIT FIELD 2,"",( 128, 72)-( 357, 88),1,1
  186.   EDIT FIELD 3,"",( 128, 99)-( 357, 115),1,1
  187.   EDIT FIELD 4,"",( 128, 126)-( 357, 142),1,1
  188.   EDIT FIELD 5,"",( 128, 153)-( 357, 169),1,1
  189.   EDIT FIELD 6,"",( 128, 180)-( 165, 196),1,1
  190.   EDIT FIELD 7,"",( 216, 181)-( 310, 197),1,1
  191.   EDIT FIELD 8,"",( 128, 207)-( 279, 223),1,1 
  192.   EDIT FIELD 1,"",( 128, 45)-( 357, 61),1,1 
  193.   
  194.   BUTTON 1, 1,"Add",(387, 70)-( 458, 90),1
  195.   BUTTON 2, 0,"Next",(387, 108)-( 458, 128),1
  196.   BUTTON 3, 0,"Previous",(387, 140)-( 458, 160),1
  197. END FN
  198.  
  199. ' ------------ start of main program
  200. FN initialize
  201.  
  202. ON DIALOG FN doDialog
  203. ON MENU FN doMenu
  204.  
  205. DO                                   
  206.   HANDLEEVENTS                      
  207. UNTIL theCowsComeHome
  208.  
  209.  
  210.